package domain

import (
	"album/dao"
	"album/model"
	"album/repo"
	"context"
	"errors"
	"github.com/jinzhu/copier"
	"github.com/zeromicro/go-zero/core/logx"
	"grpc-common/album/types/album"
	"listenboos-common/db"
)

type AttributeDomain struct {
	attributeRepo       repo.BaseAttributeRepo
	attributeValueRepo  repo.BaseAttributeValueRepo
	albumAttributeValue repo.AlbumAttributeValueRepo
}

func (u *AttributeDomain) GetByC1IdToAttribute(ctx context.Context, cid int64) (att []*model.BaseAttribute, err error) {
	att, err = u.attributeRepo.FindByC1IdToAttribute(ctx, cid)
	if err != nil {
		logx.Error(err)
		return nil, errors.New("数据库异常")
	}
	return att, err
}

func (u *AttributeDomain) GetByC1IdToAttributeValue(ctx context.Context, aid int64) (att []*model.BaseAttributeValue, err error) {
	att, err = u.attributeValueRepo.FindByAidToValue(ctx, aid)
	if err != nil {
		logx.Error(err)
		return nil, errors.New("数据库异常")
	}
	return att, err
}

func (u *AttributeDomain) SaveAlbumInfo(ctx context.Context, conn db.DBConn, id int64, values []*album.AlbumAttributeValueVoList) error {
	var attribute []*model.AlbumAttributeValue
	err := copier.Copy(&attribute, &values)
	if err != nil {
		return err
	}
	err = u.albumAttributeValue.Save(ctx, conn, id, attribute)
	if err != nil {
		logx.Error(err)
		return errors.New("数据库异常")
	}

	return nil
}
func (u *AttributeDomain) FindByAid(ctx context.Context, aid int64) (values []*model.AlbumAttributeValue, err error) {
	values, err = u.albumAttributeValue.FindByAid(ctx, aid)
	if err != nil {
		logx.Error(err)
		return nil, errors.New("数据库异常")
	}

	return values, nil
}

func (u *AttributeDomain) FindAttributeById(ctx context.Context, aid int64) (att *model.BaseAttribute, err error) {
	att, err = u.attributeRepo.FindAttributeById(ctx, aid)
	if err != nil {
		logx.Error(err)
		return nil, errors.New("数据库异常")
	}
	return att, nil

}

func (u *AttributeDomain) FindAttributeValuesById(ctx context.Context, aid int64) (values *model.BaseAttributeValue, err error) {
	values, err = u.attributeValueRepo.FindAttributeValuesById(ctx, aid)
	if err != nil {
		logx.Error(err)
		return nil, errors.New("数据库异常")
	}
	return values, nil
}

func (u *AttributeDomain) DeleteAlbumAttributeValues(ctx context.Context, conn db.DBConn, albumId int64) error {
	err := u.albumAttributeValue.DeleteAlbumAttributeValues(ctx, conn, albumId)
	if err != nil {
		logx.Error(err)
		return errors.New("数据库异常")
	}

	return nil
}

func NewAttributeDomain(db *db.ListenDB) *AttributeDomain {
	return &AttributeDomain{
		attributeRepo:       dao.NewBaseAttributeDao(db),
		attributeValueRepo:  dao.NewBaseAttributeValueDao(db),
		albumAttributeValue: dao.NewAlbumAttributeValueDao(db),
	}
}
